#include <set>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

// set：它是一个不能包含重复元素的数据集合
// set: {1}
// set.insert(1) 这次插入会成功
// set.insert(1) 这次插入会失败

// array: {1, 1}
// array.push_back(1)
// array.push_back(1)
// 不重复
// {1, 2, 6, 8, 9, 1}
// {} set
int firstDuplicateValue(vector<int> array) {
  set<int> buf;

  for (int n : array) {
    auto pair = buf.insert(n);

    if (!pair.second) {
      return n;
    }
  }

  return -1;
}

int main(int argc, char const *argv[])
{
  /* code */
  set<int> s; // 这是一个包含 int 的集合
  // s.insert 这个函数返回的是一对儿数据
  // 情况一：
  // 插入成功时的位置，true
  // 情况二：
  // set 的结束位置 s.end()，false
  // pair<set的位置,bool>
  // pair<set<int>::iterator, bool>
  
  auto result = s.insert(5); // 成功
  cout<<*result.first<<endl; // 5
  cout<<result.second<<endl; // true
  
  result = s.insert(5); // 失败
  // result.first 是 s.end()
  cout<<"第二次插入5: "<<result.second<<endl;

  for (int n : s) {
    cout<<n<<" ";
  }

  cout<<endl;

  vector<int> v{1, 2, 6, 8, 9, 1};
  //v.begin()
  // v.end()
  cout<<firstDuplicateValue(v)<<endl;


  return 0;
}
